package week7.hotel;

/**
 * Gast Klasse
  * Practicumopgave Programmeren I
  * @author W.Looge & R. Oost
  * @version 1.0
  */
public class Gast {
    // ------------------ Instantievariabelen ----------------
    
    private String naam;
    private Kamer kamer;
    
    // ------------------ Constructor ------------------------
    
    /**
     * Construeert <code>Gast</code> met gegeven naam en zonder <code>Kamer</code>.
     * @param n naam van de nieuwe <code>Gast</code>
     */
    public Gast(String n) {
        this.naam = n;
        this.kamer = null;
    }
    
    // ------------------ Aanvragen --------------------------
    
    /**
     * Levert <code>Kamer</code> op die deze <code>Gast</code> huurt.
     * @return <code>Kamer</code> die deze <code>Gast</code> huurt; <code>null</code> indien <code>Gast</code> geen kamer huurt
     */
    public Kamer getKamer() {
        return kamer;
    }
    
    /**
     * Levert naam van deze <code>Gast</code> op.
     * @return Naam van deze <code>Gast</code>.
     */
    public String getNaam() {
        return this.naam;
    }
    
    /**
     * Levert een textuele representatie van deze <code>Gast</code> op.
     * @return <code>String</code> die deze <code>Gast</code> representeert.
     */
    public String toString() {
        return "Gast " + this.naam;
    }
    /**
     * Verhuurt aan deze <code>Gast</code> een <code>Kamer</code>. Het verhuren kan alleen als
     * deze <code>Gast</code> nog geen kamer heeft, en de toe te wijzen <code>Kamer</code> nog
     * onverhuurd is. Past ook de <code>Gast</code>-referentie van de <code>Kamer</code> aan.
     * @param k kamer die aan deze <code>Gast</code> verhuurd wordt; mag niet <code>null</code> zijn.
     * @return <code>true</code> als het inchecken gelukt is; <code>false</code> als deze <code>Gast</code> al een kamer had, of k al een huurder.
     */
    public boolean checkin(Kamer k) {
        if (this.kamer == null && k.getGast() == null) {
            this.kamer = k;
            this.kamer.setGast(this);
            return true;
        }
        return false;
    }
    
    /**
     * Zet de <code>Kamer</code> van deze <code>Gast</code> op <code>null</code>. Verwijdert ook de <code>Gast</code>-referentie uit de (huidige) kamer.
     * @return <code>true</code> als de actie gelukt is; <code>false</code> als <code>Gast</code> bij aanroep geen kamer had.
     */
    public boolean checkuit() {
        if (this.kamer == null) {
            return false;
        } else {
            this.kamer.setGast(null);
            this.kamer = null;
            return true;
        }
    }

}